<!-- HTML header for doxygen 1.8.20-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	<meta name="generator" content="Doxygen 1.9.4"/>
	<meta name="viewport" content="width=device-width, initial-scale=1"/>
	<title>Raspberry Pi Pico SDK: pico_stdio</title>
	<!-- <link href="tabs.css" rel="stylesheet" type="text/css"/> -->
	<script type="text/javascript" src="jquery.js"></script>
	<script type="text/javascript" src="dynsections.js"></script>
	<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
	<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
	<link href="doxygen.css" rel="stylesheet" type="text/css" />
	<link href="normalise.css" rel="stylesheet" type="text/css"/>
<link href="main.css" rel="stylesheet" type="text/css"/>
<link href="styles.css" rel="stylesheet" type="text/css"/>
</head>
<body>
	<div class="navigation-mobile">
		<div class="logo--mobile">
			<a href="/"><img src="logo-mobile.svg" alt="Raspberry Pi"></a>
		</div>
		<div class="navigation-toggle">
			<span class="line-1"></span>
			<span class="line-2">
				<p>Menu Toggle</p>
			</span>
			<span class="line-3"></span>
		</div>
	</div>
	<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
		<div class="logo">
			<a href="index.html"> <img src="logo.svg" alt="Raspberry Pi"></a>
			<span style="display: inline-block; margin-top: 10px;">
				v2.0.0
			</span>
		</div>
		<div class="navigation-footer">
			<img src="logo-mobile.svg" alt="Raspberry Pi">
			<a href="https://www.raspberrypi.com/" target="_blank">By Raspberry Pi Ltd</a>
		</div>
<!-- 		<div class="search">
			<form>
				<input type="search" name="search" id="search" placeholder="Search">
				<input type="submit" value="Search">
			</form>
		</div> -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('group__pico__stdio.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#groups">Modules</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle"><div class="title">pico_stdio<div class="ingroups"><a class="el" href="group__runtime.html">Runtime Infrastructure</a></div></div></div>
</div><!--header-->
<div class="contents">

<p>Customized stdio support allowing for input and output from UART, USB, semi-hosting etc.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="groups" name="groups"></a>
Modules</h2></td></tr>
<tr class="memitem:group__pico__stdio__semihosting"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio__semihosting.html">pico_stdio_semihosting</a></td></tr>
<tr class="memdesc:group__pico__stdio__semihosting"><td class="mdescLeft">&#160;</td><td class="mdescRight">Experimental support for stdout using RAM semihosting. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__pico__stdio__uart"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio__uart.html">pico_stdio_uart</a></td></tr>
<tr class="memdesc:group__pico__stdio__uart"><td class="mdescLeft">&#160;</td><td class="mdescRight">Support for stdin/stdout using UART. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__pico__stdio__rtt"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio__rtt.html">pico_stdio_rtt</a></td></tr>
<tr class="memdesc:group__pico__stdio__rtt"><td class="mdescLeft">&#160;</td><td class="mdescRight">Support for stdin/stdout using SEGGER RTT. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:group__pico__stdio__usb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio__usb.html">pico_stdio_usb</a></td></tr>
<tr class="memdesc:group__pico__stdio__usb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Support for stdin/stdout over USB serial (CDC) <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga0e604311fb226dae91ff4eb17a19d67a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#ga0e604311fb226dae91ff4eb17a19d67a">stdio_init_all</a> (void)</td></tr>
<tr class="memdesc:ga0e604311fb226dae91ff4eb17a19d67a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize all of the present standard stdio types that are linked into the binary.  <a href="group__pico__stdio.html#ga0e604311fb226dae91ff4eb17a19d67a">More...</a><br /></td></tr>
<tr class="separator:ga0e604311fb226dae91ff4eb17a19d67a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gace6c31545f212bf181718f4fc7587ea7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#gace6c31545f212bf181718f4fc7587ea7">stdio_deinit_all</a> (void)</td></tr>
<tr class="memdesc:gace6c31545f212bf181718f4fc7587ea7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deinitialize all of the present standard stdio types that are linked into the binary.  <a href="group__pico__stdio.html#gace6c31545f212bf181718f4fc7587ea7">More...</a><br /></td></tr>
<tr class="separator:gace6c31545f212bf181718f4fc7587ea7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga90927805d6b48285139ab31098623df1"><td class="memItemLeft" align="right" valign="top"><a id="ga90927805d6b48285139ab31098623df1" name="ga90927805d6b48285139ab31098623df1"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>stdio_flush</b> (void)</td></tr>
<tr class="memdesc:ga90927805d6b48285139ab31098623df1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flushes any buffered output. <br /></td></tr>
<tr class="separator:ga90927805d6b48285139ab31098623df1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga26d27f1b58f1385798f93a9799c40b73"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#ga26d27f1b58f1385798f93a9799c40b73">stdio_getchar_timeout_us</a> (uint32_t timeout_us)</td></tr>
<tr class="memdesc:ga26d27f1b58f1385798f93a9799c40b73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a character from stdin if there is one available within a timeout.  <a href="group__pico__stdio.html#ga26d27f1b58f1385798f93a9799c40b73">More...</a><br /></td></tr>
<tr class="separator:ga26d27f1b58f1385798f93a9799c40b73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5d24f1a711eba3e0084b6310f6478c1a"><td class="memItemLeft" align="right" valign="top"><a id="ga5d24f1a711eba3e0084b6310f6478c1a" name="ga5d24f1a711eba3e0084b6310f6478c1a"></a>
static int&#160;</td><td class="memItemRight" valign="bottom"><b>getchar_timeout_us</b> (uint32_t timeout_us)</td></tr>
<tr class="memdesc:ga5d24f1a711eba3e0084b6310f6478c1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Alias for <a class="el" href="group__pico__stdio.html#ga26d27f1b58f1385798f93a9799c40b73">stdio_getchar_timeout_us</a> for backwards compatibility. <br /></td></tr>
<tr class="separator:ga5d24f1a711eba3e0084b6310f6478c1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga826d33ec05c3e33dbddf0cb09e329562"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#ga826d33ec05c3e33dbddf0cb09e329562">stdio_set_driver_enabled</a> (<a class="el" href="structstdio__driver.html">stdio_driver_t</a> *driver, bool enabled)</td></tr>
<tr class="memdesc:ga826d33ec05c3e33dbddf0cb09e329562"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds or removes a driver from the list of active drivers used for input/output.  <a href="group__pico__stdio.html#ga826d33ec05c3e33dbddf0cb09e329562">More...</a><br /></td></tr>
<tr class="separator:ga826d33ec05c3e33dbddf0cb09e329562"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae3944ee24af8163a9538f01cda3e28df"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#gae3944ee24af8163a9538f01cda3e28df">stdio_filter_driver</a> (<a class="el" href="structstdio__driver.html">stdio_driver_t</a> *driver)</td></tr>
<tr class="memdesc:gae3944ee24af8163a9538f01cda3e28df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control limiting of output to a single driver.  <a href="group__pico__stdio.html#gae3944ee24af8163a9538f01cda3e28df">More...</a><br /></td></tr>
<tr class="separator:gae3944ee24af8163a9538f01cda3e28df"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaba86bf2cb6b86a9078cd94dcf47b1915"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#gaba86bf2cb6b86a9078cd94dcf47b1915">stdio_set_translate_crlf</a> (<a class="el" href="structstdio__driver.html">stdio_driver_t</a> *driver, bool translate)</td></tr>
<tr class="memdesc:gaba86bf2cb6b86a9078cd94dcf47b1915"><td class="mdescLeft">&#160;</td><td class="mdescRight">control conversion of line feeds to carriage return on transmissions  <a href="group__pico__stdio.html#gaba86bf2cb6b86a9078cd94dcf47b1915">More...</a><br /></td></tr>
<tr class="separator:gaba86bf2cb6b86a9078cd94dcf47b1915"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8caa718064b34ce684c02f9f1313ac41"><td class="memItemLeft" align="right" valign="top"><a id="ga8caa718064b34ce684c02f9f1313ac41" name="ga8caa718064b34ce684c02f9f1313ac41"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>stdio_putchar_raw</b> (int c)</td></tr>
<tr class="memdesc:ga8caa718064b34ce684c02f9f1313ac41"><td class="mdescLeft">&#160;</td><td class="mdescRight">putchar variant that skips any CR/LF conversion if enabled <br /></td></tr>
<tr class="separator:ga8caa718064b34ce684c02f9f1313ac41"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae67e6fe5e7c87d6f15816797020245ad"><td class="memItemLeft" align="right" valign="top"><a id="gae67e6fe5e7c87d6f15816797020245ad" name="gae67e6fe5e7c87d6f15816797020245ad"></a>
static int&#160;</td><td class="memItemRight" valign="bottom"><b>putchar_raw</b> (int c)</td></tr>
<tr class="memdesc:gae67e6fe5e7c87d6f15816797020245ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Alias for <a class="el" href="group__pico__stdio.html#ga8caa718064b34ce684c02f9f1313ac41">stdio_putchar_raw</a> for backwards compatibility. <br /></td></tr>
<tr class="separator:gae67e6fe5e7c87d6f15816797020245ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad00b5fbfdcfd83b79512b402f5881458"><td class="memItemLeft" align="right" valign="top"><a id="gad00b5fbfdcfd83b79512b402f5881458" name="gad00b5fbfdcfd83b79512b402f5881458"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>stdio_puts_raw</b> (const char *s)</td></tr>
<tr class="memdesc:gad00b5fbfdcfd83b79512b402f5881458"><td class="mdescLeft">&#160;</td><td class="mdescRight">puts variant that skips any CR/LF conversion if enabled <br /></td></tr>
<tr class="separator:gad00b5fbfdcfd83b79512b402f5881458"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9a78025384cd3ce2095d01e09a2c0565"><td class="memItemLeft" align="right" valign="top"><a id="ga9a78025384cd3ce2095d01e09a2c0565" name="ga9a78025384cd3ce2095d01e09a2c0565"></a>
static int&#160;</td><td class="memItemRight" valign="bottom"><b>puts_raw</b> (const char *s)</td></tr>
<tr class="memdesc:ga9a78025384cd3ce2095d01e09a2c0565"><td class="mdescLeft">&#160;</td><td class="mdescRight">Alias for <a class="el" href="group__pico__stdio.html#gad00b5fbfdcfd83b79512b402f5881458">stdio_puts_raw</a> for backwards compatibility. <br /></td></tr>
<tr class="separator:ga9a78025384cd3ce2095d01e09a2c0565"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4b010bf88f65fc5d38a29d5538fa80e1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#ga4b010bf88f65fc5d38a29d5538fa80e1">stdio_set_chars_available_callback</a> (void(*fn)(void *), void *param)</td></tr>
<tr class="memdesc:ga4b010bf88f65fc5d38a29d5538fa80e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">get notified when there are input characters available  <a href="group__pico__stdio.html#ga4b010bf88f65fc5d38a29d5538fa80e1">More...</a><br /></td></tr>
<tr class="separator:ga4b010bf88f65fc5d38a29d5538fa80e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7ea974d7cbc7f7e325b4a1b0fe80e4ab"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#ga7ea974d7cbc7f7e325b4a1b0fe80e4ab">stdio_get_until</a> (char *buf, int len, <a class="el" href="group__timestamp.html#ga8b7f3d602cc053f05bacceeacc257ed8">absolute_time_t</a> until)</td></tr>
<tr class="memdesc:ga7ea974d7cbc7f7e325b4a1b0fe80e4ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits until a timeout to reard at least one character into a buffer.  <a href="group__pico__stdio.html#ga7ea974d7cbc7f7e325b4a1b0fe80e4ab">More...</a><br /></td></tr>
<tr class="separator:ga7ea974d7cbc7f7e325b4a1b0fe80e4ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2657ebac5e66ff37d0231b2b94dcd87f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__stdio.html#ga2657ebac5e66ff37d0231b2b94dcd87f">stdio_put_string</a> (const char *s, int len, bool newline, bool cr_translation)</td></tr>
<tr class="memdesc:ga2657ebac5e66ff37d0231b2b94dcd87f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a buffer to stdout with optional newline and carriage return insertion.  <a href="group__pico__stdio.html#ga2657ebac5e66ff37d0231b2b94dcd87f">More...</a><br /></td></tr>
<tr class="separator:ga2657ebac5e66ff37d0231b2b94dcd87f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac135c621fb85b37ba7ca271ad44cc984"><td class="memItemLeft" align="right" valign="top"><a id="gac135c621fb85b37ba7ca271ad44cc984" name="gac135c621fb85b37ba7ca271ad44cc984"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>stdio_getchar</b> (void)</td></tr>
<tr class="memdesc:gac135c621fb85b37ba7ca271ad44cc984"><td class="mdescLeft">&#160;</td><td class="mdescRight">stdio_getchar Alias for getchar that definitely does not go thru the implementation in the standard C library even when PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 <br /></td></tr>
<tr class="separator:gac135c621fb85b37ba7ca271ad44cc984"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5a0417cd80362b585340991cdbe942ad"><td class="memItemLeft" align="right" valign="top"><a id="ga5a0417cd80362b585340991cdbe942ad" name="ga5a0417cd80362b585340991cdbe942ad"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>stdio_putchar</b> (int)</td></tr>
<tr class="memdesc:ga5a0417cd80362b585340991cdbe942ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">stdio_getchar Alias for putchar that definitely does not go thru the implementation in the standard C library even when PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 <br /></td></tr>
<tr class="separator:ga5a0417cd80362b585340991cdbe942ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga37b78b01a1defa869f4b6eae07cbc86e"><td class="memItemLeft" align="right" valign="top"><a id="ga37b78b01a1defa869f4b6eae07cbc86e" name="ga37b78b01a1defa869f4b6eae07cbc86e"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>stdio_puts</b> (const char *s)</td></tr>
<tr class="memdesc:ga37b78b01a1defa869f4b6eae07cbc86e"><td class="mdescLeft">&#160;</td><td class="mdescRight">stdio_getchar Alias for puts that definitely does not go thru the implementation in the standard C library even when PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 <br /></td></tr>
<tr class="separator:ga37b78b01a1defa869f4b6eae07cbc86e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaad0147c9744dfa14ffa591007310ad25"><td class="memItemLeft" align="right" valign="top"><a id="gaad0147c9744dfa14ffa591007310ad25" name="gaad0147c9744dfa14ffa591007310ad25"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>stdio_vprintf</b> (const char *format, va_list va)</td></tr>
<tr class="memdesc:gaad0147c9744dfa14ffa591007310ad25"><td class="mdescLeft">&#160;</td><td class="mdescRight">stdio_getchar Alias for vprintf that definitely does not go thru the implementation in the standard C library even when PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 <br /></td></tr>
<tr class="separator:gaad0147c9744dfa14ffa591007310ad25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae9afcfe3e3db353e1bddd5b87d7be454"><td class="memItemLeft" align="right" valign="top"><a id="gae9afcfe3e3db353e1bddd5b87d7be454" name="gae9afcfe3e3db353e1bddd5b87d7be454"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>__printflike</b> (1, 0) stdio_printf(const char *format</td></tr>
<tr class="memdesc:gae9afcfe3e3db353e1bddd5b87d7be454"><td class="mdescLeft">&#160;</td><td class="mdescRight">stdio_getchar Alias for printf that definitely does not go thru the implementation in the standard C library even when PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS == 0 <br /></td></tr>
<tr class="separator:gae9afcfe3e3db353e1bddd5b87d7be454"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p >Customized stdio support allowing for input and output from UART, USB, semi-hosting etc. </p>
<p >Note the API for adding additional input output devices is not yet considered stable </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="gace6c31545f212bf181718f4fc7587ea7" name="gace6c31545f212bf181718f4fc7587ea7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gace6c31545f212bf181718f4fc7587ea7">&#9670;&nbsp;</a></span>stdio_deinit_all()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool stdio_deinit_all </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deinitialize all of the present standard stdio types that are linked into the binary. </p>
<p >This method currently only supports stdio_uart and stdio_semihosting</p>
<dl class="section return"><dt>Returns</dt><dd>true if all outputs was successfully deinitialized, false otherwise. </dd></dl>
<dl class="section see"><dt>See also</dt><dd>stdio_uart, stdio_usb, stdio_semihosting, stdio_rtt </dd></dl>

</div>
</div>
<a id="gae3944ee24af8163a9538f01cda3e28df" name="gae3944ee24af8163a9538f01cda3e28df"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae3944ee24af8163a9538f01cda3e28df">&#9670;&nbsp;</a></span>stdio_filter_driver()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void stdio_filter_driver </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structstdio__driver.html">stdio_driver_t</a> *&#160;</td>
          <td class="paramname"><em>driver</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Control limiting of output to a single driver. </p>
<dl class="section note"><dt>Note</dt><dd>this method should always be called on an initialized driver</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">driver</td><td>if non-null then output only that driver will be used for input/output (assuming it is in the list of enabled drivers). if NULL then all enabled drivers will be used </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga7ea974d7cbc7f7e325b4a1b0fe80e4ab" name="ga7ea974d7cbc7f7e325b4a1b0fe80e4ab"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7ea974d7cbc7f7e325b4a1b0fe80e4ab">&#9670;&nbsp;</a></span>stdio_get_until()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int stdio_get_until </td>
          <td>(</td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__timestamp.html#ga8b7f3d602cc053f05bacceeacc257ed8">absolute_time_t</a>&#160;</td>
          <td class="paramname"><em>until</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Waits until a timeout to reard at least one character into a buffer. </p>
<p >This method returns as soon as input is available, but more characters may be returned up to the end of the buffer.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">buf</td><td>the buffer to read into </td></tr>
    <tr><td class="paramname">len</td><td>the length of the buffer </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the number of characters read or PICO_ERROR_TIMEOUT </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">until</td><td>the time after which to return PICO_ERROR_TIMEOUT if no characters are available </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga26d27f1b58f1385798f93a9799c40b73" name="ga26d27f1b58f1385798f93a9799c40b73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga26d27f1b58f1385798f93a9799c40b73">&#9670;&nbsp;</a></span>stdio_getchar_timeout_us()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int stdio_getchar_timeout_us </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>timeout_us</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return a character from stdin if there is one available within a timeout. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">timeout_us</td><td>the timeout in microseconds, or 0 to not wait for a character if none available. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the character from 0-255 or PICO_ERROR_TIMEOUT if timeout occurs </dd></dl>

</div>
</div>
<a id="ga0e604311fb226dae91ff4eb17a19d67a" name="ga0e604311fb226dae91ff4eb17a19d67a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0e604311fb226dae91ff4eb17a19d67a">&#9670;&nbsp;</a></span>stdio_init_all()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool stdio_init_all </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Initialize all of the present standard stdio types that are linked into the binary. </p>
<p >Call this method once you have set up your clocks to enable the stdio support for UART, USB, semihosting, and RTT based on the presence of the respective libraries in the binary.</p>
<p >When stdio_usb is configured, this method can be optionally made to block, waiting for a connection via the variables specified in <a class="el" href="group__pico__stdio__usb.html#gab87bcfa3f24e5a3fe92a944f9eecc460">stdio_usb_init</a> (i.e. PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS)</p>
<dl class="section return"><dt>Returns</dt><dd>true if at least one output was successfully initialized, false otherwise. </dd></dl>
<dl class="section see"><dt>See also</dt><dd>stdio_uart, stdio_usb, stdio_semihosting, stdio_rtt </dd></dl>

</div>
</div>
<a id="ga2657ebac5e66ff37d0231b2b94dcd87f" name="ga2657ebac5e66ff37d0231b2b94dcd87f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2657ebac5e66ff37d0231b2b94dcd87f">&#9670;&nbsp;</a></span>stdio_put_string()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int stdio_put_string </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>s</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>newline</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>cr_translation</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Prints a buffer to stdout with optional newline and carriage return insertion. </p>
<p >This method returns as soon as input is available, but more characters may be returned up to the end of the buffer.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>the characters to print </td></tr>
    <tr><td class="paramname">len</td><td>the length of s </td></tr>
    <tr><td class="paramname">newline</td><td>true if a newline should be added after the string </td></tr>
    <tr><td class="paramname">cr_translation</td><td>true if line feed to carriage return translation should be performed </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the number of characters written </dd></dl>

</div>
</div>
<a id="ga4b010bf88f65fc5d38a29d5538fa80e1" name="ga4b010bf88f65fc5d38a29d5538fa80e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4b010bf88f65fc5d38a29d5538fa80e1">&#9670;&nbsp;</a></span>stdio_set_chars_available_callback()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void stdio_set_chars_available_callback </td>
          <td>(</td>
          <td class="paramtype">void(*)(void *)&#160;</td>
          <td class="paramname"><em>fn</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>param</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>get notified when there are input characters available </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">fn</td><td>Callback function to be called when characters are available. Pass NULL to cancel any existing callback </td></tr>
    <tr><td class="paramname">param</td><td>Pointer to pass to the callback </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga826d33ec05c3e33dbddf0cb09e329562" name="ga826d33ec05c3e33dbddf0cb09e329562"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga826d33ec05c3e33dbddf0cb09e329562">&#9670;&nbsp;</a></span>stdio_set_driver_enabled()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void stdio_set_driver_enabled </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structstdio__driver.html">stdio_driver_t</a> *&#160;</td>
          <td class="paramname"><em>driver</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>enabled</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Adds or removes a driver from the list of active drivers used for input/output. </p>
<dl class="section note"><dt>Note</dt><dd>this method should always be called on an initialized driver and is not re-entrant </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">driver</td><td>the driver </td></tr>
    <tr><td class="paramname">enabled</td><td>true to add, false to remove </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="gaba86bf2cb6b86a9078cd94dcf47b1915" name="gaba86bf2cb6b86a9078cd94dcf47b1915"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaba86bf2cb6b86a9078cd94dcf47b1915">&#9670;&nbsp;</a></span>stdio_set_translate_crlf()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void stdio_set_translate_crlf </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structstdio__driver.html">stdio_driver_t</a> *&#160;</td>
          <td class="paramname"><em>driver</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>translate</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>control conversion of line feeds to carriage return on transmissions </p>
<dl class="section note"><dt>Note</dt><dd>this method should always be called on an initialized driver</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">driver</td><td>the driver </td></tr>
    <tr><td class="paramname">translate</td><td>If true, convert line feeds to carriage return on transmissions </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->

	<script src="main.js"></script>
</body>
</html>